home *** CD-ROM | disk | FTP | other *** search
/ Mac Easy 2010 May / Mac Life Ubuntu.iso / casper / filesystem.squashfs / usr / lib / python2.6 / lib2to3 / fixes / fix_urllib.pyc (.txt) < prev    next >
Encoding:
Python Compiled Bytecode  |  2009-04-20  |  6.3 KB  |  208 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyc (Python 2.6)
  3.  
  4. '''Fix changes imports of urllib which are now incompatible.
  5.    This is rather similar to fix_imports, but because of the more
  6.    complex nature of the fixing for urllib, it has its own fixer.
  7. '''
  8. from fix_imports import alternates, FixImports
  9. from  import fixer_base
  10. from fixer_util import Name, Comma, FromImport, Newline, attr_chain
  11. MAPPING = {
  12.     'urllib': [
  13.         ('urllib.request', [
  14.             'URLOpener',
  15.             'FancyURLOpener',
  16.             'urlretrieve',
  17.             '_urlopener',
  18.             'urlcleanup']),
  19.         ('urllib.parse', [
  20.             'quote',
  21.             'quote_plus',
  22.             'unquote',
  23.             'unquote_plus',
  24.             'urlencode',
  25.             'pathname2url',
  26.             'url2pathname',
  27.             'splitattr',
  28.             'splithost',
  29.             'splitnport',
  30.             'splitpasswd',
  31.             'splitport',
  32.             'splitquery',
  33.             'splittag',
  34.             'splittype',
  35.             'splituser',
  36.             'splitvalue']),
  37.         ('urllib.error', [
  38.             'ContentTooShortError'])],
  39.     'urllib2': [
  40.         ('urllib.request', [
  41.             'urlopen',
  42.             'install_opener',
  43.             'build_opener',
  44.             'Request',
  45.             'OpenerDirector',
  46.             'BaseHandler',
  47.             'HTTPDefaultErrorHandler',
  48.             'HTTPRedirectHandler',
  49.             'HTTPCookieProcessor',
  50.             'ProxyHandler',
  51.             'HTTPPasswordMgr',
  52.             'HTTPPasswordMgrWithDefaultRealm',
  53.             'AbstractBasicAuthHandler',
  54.             'HTTPBasicAuthHandler',
  55.             'ProxyBasicAuthHandler',
  56.             'AbstractDigestAuthHandler',
  57.             'HTTPDigestAuthHandler',
  58.             'ProxyDigestAuthHandler',
  59.             'HTTPHandler',
  60.             'HTTPSHandler',
  61.             'FileHandler',
  62.             'FTPHandler',
  63.             'CacheFTPHandler',
  64.             'UnknownHandler']),
  65.         ('urllib.error', [
  66.             'URLError',
  67.             'HTTPError'])] }
  68. MAPPING['urllib2'].append(MAPPING['urllib'][1])
  69.  
  70. def build_pattern():
  71.     bare = set()
  72.     for old_module, changes in MAPPING.items():
  73.         for change in changes:
  74.             (new_module, members) = change
  75.             members = alternates(members)
  76.             yield "import_name< 'import' (module=%r\n                                  | dotted_as_names< any* module=%r any* >) >\n                  " % (old_module, old_module)
  77.             yield "import_from< 'from' mod_member=%r 'import'\n                       ( member=%s | import_as_name< member=%s 'as' any > |\n                         import_as_names< members=any*  >) >\n                  " % (old_module, members, members)
  78.             yield "import_from< 'from' module_star=%r 'import' star='*' >\n                  " % old_module
  79.             yield "import_name< 'import'\n                                  dotted_as_name< module_as=%r 'as' any > >\n                  " % old_module
  80.             yield "power< module_dot=%r trailer< '.' member=%s > any* >\n                  " % (old_module, members)
  81.         
  82.     
  83.  
  84.  
  85. class FixUrllib(FixImports):
  86.     
  87.     def build_pattern(self):
  88.         return '|'.join(build_pattern())
  89.  
  90.     
  91.     def transform_import(self, node, results):
  92.         '''Transform for the basic import case. Replaces the old
  93.            import name with a comma separated list of its
  94.            replacements.
  95.         '''
  96.         import_mod = results.get('module')
  97.         pref = import_mod.get_prefix()
  98.         names = []
  99.         for name in MAPPING[import_mod.value][:-1]:
  100.             names.extend([
  101.                 Name(name[0], prefix = pref),
  102.                 Comma()])
  103.         
  104.         names.append(Name(MAPPING[import_mod.value][-1][0], prefix = pref))
  105.         import_mod.replace(names)
  106.  
  107.     
  108.     def transform_member(self, node, results):
  109.         '''Transform for imports of specific module elements. Replaces
  110.            the module to be imported from with the appropriate new
  111.            module.
  112.         '''
  113.         mod_member = results.get('mod_member')
  114.         pref = mod_member.get_prefix()
  115.         member = results.get('member')
  116.         if member:
  117.             if isinstance(member, list):
  118.                 member = member[0]
  119.             
  120.             new_name = None
  121.             for change in MAPPING[mod_member.value]:
  122.                 if member.value in change[1]:
  123.                     new_name = change[0]
  124.                     break
  125.                     continue
  126.             
  127.             if new_name:
  128.                 mod_member.replace(Name(new_name, prefix = pref))
  129.             else:
  130.                 self.cannot_convert(node, 'This is an invalid module element')
  131.         else:
  132.             modules = []
  133.             mod_dict = { }
  134.             members = results.get('members')
  135.             for member in members:
  136.                 member = member.value
  137.                 if member != ',':
  138.                     for change in MAPPING[mod_member.value]:
  139.                         if member in change[1]:
  140.                             if change[0] in mod_dict:
  141.                                 mod_dict[change[0]].append(member)
  142.                             else:
  143.                                 mod_dict[change[0]] = [
  144.                                     member]
  145.                                 modules.append(change[0])
  146.                         change[0] in mod_dict
  147.                     
  148.             
  149.             new_nodes = []
  150.             for module in modules:
  151.                 elts = mod_dict[module]
  152.                 names = []
  153.                 for elt in elts[:-1]:
  154.                     names.extend([
  155.                         Name(elt, prefix = pref),
  156.                         Comma()])
  157.                 
  158.                 names.append(Name(elts[-1], prefix = pref))
  159.                 new_nodes.append(FromImport(module, names))
  160.             
  161.             if new_nodes:
  162.                 nodes = []
  163.                 for new_node in new_nodes[:-1]:
  164.                     nodes.extend([
  165.                         new_node,
  166.                         Newline()])
  167.                 
  168.                 nodes.append(new_nodes[-1])
  169.                 node.replace(nodes)
  170.             else:
  171.                 self.cannot_convert(node, 'All module elements are invalid')
  172.  
  173.     
  174.     def transform_dot(self, node, results):
  175.         '''Transform for calls to module members in code.'''
  176.         module_dot = results.get('module_dot')
  177.         member = results.get('member')
  178.         if isinstance(member, list):
  179.             member = member[0]
  180.         
  181.         new_name = None
  182.         for change in MAPPING[module_dot.value]:
  183.             if member.value in change[1]:
  184.                 new_name = change[0]
  185.                 break
  186.                 continue
  187.         
  188.         if new_name:
  189.             module_dot.replace(Name(new_name, prefix = module_dot.get_prefix()))
  190.         else:
  191.             self.cannot_convert(node, 'This is an invalid module element')
  192.  
  193.     
  194.     def transform(self, node, results):
  195.         if results.get('module'):
  196.             self.transform_import(node, results)
  197.         elif results.get('mod_member'):
  198.             self.transform_member(node, results)
  199.         elif results.get('module_dot'):
  200.             self.transform_dot(node, results)
  201.         elif results.get('module_star'):
  202.             self.cannot_convert(node, 'Cannot handle star imports.')
  203.         elif results.get('module_as'):
  204.             self.cannot_convert(node, 'This module is now multiple modules')
  205.         
  206.  
  207.  
  208.